for(var i = 0;i<3;i++){
    console.log(i)  //0 1 2
}
console.log(i,'i')  //3

//当使用var声明for循环的迭代变量时，改变量会突破循环的块级作用域。直接泄漏到外层作用域
//此时var定义的迭代变量不属于块级作用域，而是属于函数机作用域
//let定义迭代变量时，每次遍历会生成一个新的变量副本，异步回调捕获各自迭代的独立值


function test(){
    num = 123
}
test()
console.log(num)


for(let i = 0;i<5;i++){
    setTimeout(()=>{
        console.log(i)
    })
}

for(var i = 0;i<5;i++){
    setTimeout(()=>{
        console.log(i)
    })
}
console.log(i,'ii')
for(var i = 0;i<5;i++){
    (function(j){
        setTimeout(()=>{
            console.log(j,'j') //立即执行函数，每次遍历立即执行函数都会创建新的独立作用域，异步回调捕获当前作用域的变量
        })
    })(i)
}

